home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / system / filesyst / dosfs / dosfsck_.z / dosfsck_ / dosfsck / common.c < prev    next >
C/C++ Source or Header  |  1993-05-07  |  2KB  |  101 lines

  1. /* common.c  -  Common functions */
  2.  
  3. /* Written 1993 by Werner Almesberger */
  4.  
  5.  
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdarg.h>
  10. #include <errno.h>
  11.  
  12. #include "common.h"
  13.  
  14.  
  15. typedef struct _link {
  16.     void *data;
  17.     struct _link *next;
  18. } LINK;
  19.  
  20.  
  21. void die(char *msg,...)
  22. {
  23.     va_list args;
  24.  
  25.     va_start(args,msg);
  26.     vfprintf(stderr,msg,args);
  27.     va_end(args);
  28.     fprintf(stderr,"\n");
  29.     exit(1);
  30. }
  31.  
  32.  
  33. void pdie(char *msg,...)
  34. {
  35.     va_list args;
  36.  
  37.     va_start(args,msg);
  38.     vfprintf(stderr,msg,args);
  39.     va_end(args);
  40.     fprintf(stderr,":%s\n",strerror(errno));
  41.     exit(1);
  42. }
  43.  
  44.  
  45. void *alloc(int size)
  46. {
  47.     void *this;
  48.  
  49.     if (this = malloc(size)) return this;
  50.     pdie("malloc");
  51.     return NULL; /* for GCC */
  52. }
  53.  
  54.  
  55. void *qalloc(void **root,int size)
  56. {
  57.     LINK *link;
  58.  
  59.     link = alloc(sizeof(LINK));
  60.     link->next = *root;
  61.     *root = link;
  62.     return link->data = alloc(size);
  63. }
  64.  
  65.  
  66. void qfree(void **root)
  67. {
  68.     LINK *this;
  69.  
  70.     while (*root) {
  71.     this = (LINK *) *root;
  72.     *root = this->next;
  73.     free(this->data);
  74.     free(this);
  75.     }
  76. }
  77.  
  78.  
  79. int min(int a,int b)
  80. {
  81.     return a < b ? a : b;
  82. }
  83.  
  84.  
  85. char get_key(char *valid,char *prompt)
  86. {
  87.     int ch,okay;
  88.  
  89.     while (1) {
  90.     if (prompt) printf("%s ",prompt);
  91.     fflush(stdout);
  92.     while (ch = getchar(), ch == ' ' || ch == '\t');
  93.     if (ch == EOF) exit(0);
  94.     if (!strchr(valid,okay = ch)) okay = 0;
  95.     while (ch = getchar(), ch != '\n' && ch != EOF);
  96.     if (ch == EOF) exit(0);
  97.     if (okay) return okay;
  98.     printf("Invalid input.\n");
  99.     }
  100. }
  101.